From 6a0786a4a615fa7bb81ef665f2864955cf002119 Mon Sep 17 00:00:00 2001 From: robertlipe Date: Thu, 2 Jan 2014 00:09:29 +0000 Subject: [PATCH] Memory fixes for Magellan. --- gpsbabel/gpx.cc | 14 -------------- gpsbabel/magellan.h | 2 +- gpsbabel/maggeo.cc | 3 ++- gpsbabel/magproto.cc | 28 +++++++++++----------------- gpsbabel/stmsdf.cc | 2 +- 5 files changed, 15 insertions(+), 34 deletions(-) diff --git a/gpsbabel/gpx.cc b/gpsbabel/gpx.cc index b3aeacf0d..5b554fd8b 100644 --- a/gpsbabel/gpx.cc +++ b/gpsbabel/gpx.cc @@ -938,14 +938,7 @@ gpx_end(const QString& el) wpt_tmp = NULL; break; case tt_cache_name: -#if NEW_STRINGS wpt_tmp->notes = cdatastr; -#else - if (wpt_tmp->notes != NULL) { - xfree(wpt_tmp->notes); - } - wpt_tmp->notes = xstrdup(cdatastr); -#endif break; case tt_cache_container: waypt_alloc_gc_data(wpt_tmp)->container = gs_mkcont(cdatastr); @@ -1126,14 +1119,7 @@ gpx_end(const QString& el) case tt_wpt_desc: case tt_trk_trkseg_trkpt_desc: case tt_rte_rtept_desc: -#if NEW_STRINGS wpt_tmp->notes = cdatastr; -#else - if (wpt_tmp->notes != NULL) { - xfree(wpt_tmp->notes); - } - wpt_tmp->notes = xstrdup(cdatastr); -#endif break; case tt_pdop: wpt_tmp->pdop = cdatastr.toDouble(); diff --git a/gpsbabel/magellan.h b/gpsbabel/magellan.h index fbc47aa6a..cfa740660 100644 --- a/gpsbabel/magellan.h +++ b/gpsbabel/magellan.h @@ -48,7 +48,7 @@ QString mag_find_descr_from_token(const char* token); QString mag_find_token_from_descr(const QString& icon); unsigned int mag_checksum(const char* const buf); -char* m330_cleanse(const char* istring); +QString m330_cleanse(const char* istring); waypoint* mag_trkparse(char* trkmsg); void mag_rteparse(char* rtemsg); diff --git a/gpsbabel/maggeo.cc b/gpsbabel/maggeo.cc index db3ee579c..0093b76f6 100644 --- a/gpsbabel/maggeo.cc +++ b/gpsbabel/maggeo.cc @@ -224,11 +224,12 @@ append(char* buf, const char* str) /* Actually, this function needs needs refactored... */ cleansed2 = xstrdup(cleansed1); #else - cleansed2 = m330_cleanse(cleansed1); + cleansed2 = xstrdup(m330_cleanse(cleansed1)); #endif strcat(buf, cleansed2); + xfree(cleansed1); xfree(cleansed2); diff --git a/gpsbabel/magproto.cc b/gpsbabel/magproto.cc index 77fafb623..a2e9d4f52 100644 --- a/gpsbabel/magproto.cc +++ b/gpsbabel/magproto.cc @@ -112,7 +112,7 @@ static route_head* trk_head; static int ignore_unable; static waypoint* mag_wptparse(char*); -typedef char* (cleanse_fn)(const char*); +typedef QString (cleanse_fn)(const char*); static cleanse_fn* mag_cleanse; static const char** os_get_magellan_mountpoints(); @@ -223,7 +223,7 @@ static icon_mapping_t* icon_mapping = map330_icon_table; * that's valid for a waypoint name or comment. The string should be * freed when you're done with it. */ -static char* +static QString m315_cleanse(const char* istring) { char* rstring = (char*) xmalloc(strlen(istring)+1); @@ -237,13 +237,15 @@ m315_cleanse(const char* istring) } } *o = 0; - return rstring; + QString rv(rstring); + xfree(rstring); + return rv; } /* * Do same for 330, Meridian, and SportTrak. */ -char* +QString m330_cleanse(const char* istring) { static char m330_valid_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ " @@ -259,7 +261,9 @@ m330_cleanse(const char* istring) } } *o = 0; - return rstring; + QString rv(rstring); + xfree(rstring); + return rv; } /* @@ -522,7 +526,6 @@ retry: trk_head = route_head_alloc(); /* Whack trailing extension if present. */ -#if NEW_STRINGS QString s = get_filename(curfname); int idx = s.indexOf('.'); if (idx > 0) { @@ -530,15 +533,6 @@ retry: } trk_head->rte_name = s; -#else - char* e; - const char* s = get_filename(curfname); - trk_head->rte_name = xstrdup(s); - e = strrchr(trk_head->rte_name, '.'); - if (e) { - *e = '\0'; - } -#endif track_add_head(trk_head); } @@ -1118,7 +1112,7 @@ mag_rteparse(char* rtemsg) if (broken_sportrak && abuf[0]) { rte_elem = (mag_rte_elem*) xcalloc(sizeof(*rte_elem),1); QUEUE_INIT(&rte_elem->Q); - rte_elem->wpt_name = xstrdup(abuf); + rte_elem->wpt_name = (abuf); ENQUEUE_TAIL(&mag_rte_head->Q, &rte_elem->Q); } @@ -1138,7 +1132,7 @@ mag_rteparse(char* rtemsg) rte_head = route_head_alloc(); route_add_head(rte_head); rte_head->rte_num = rtenum; - rte_head->rte_name = xstrdup(rte_name); + rte_head->rte_name = rte_name; /* * It is quite feasible that we have 200 waypoints, diff --git a/gpsbabel/stmsdf.cc b/gpsbabel/stmsdf.cc index 4404516b4..b4a577fdb 100644 --- a/gpsbabel/stmsdf.cc +++ b/gpsbabel/stmsdf.cc @@ -268,7 +268,7 @@ parse_point(char* line) break; case 1: - wpt->shortname = csv_stringclean(str, "\""); + wpt->shortname = csv_stringclean(str, QString("\"")); if ((what == 2) || (what == 3)) { column += 2; /* doesn't have date and time */ } -- 2.30.2